package proyecto.ort.edu.uy.web.presentacion;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.SelectEvent;
import org.primefaces.model.chart.CartesianChartModel;
import org.primefaces.model.chart.ChartSeries;

import proyecto.ort.edu.uy.dominio.AreaDeTrabajo;
import proyecto.ort.edu.uy.dominio.EstadosTarea;
import proyecto.ort.edu.uy.dominio.Tarea;
import proyecto.ort.edu.uy.dominio.Usuario;
import proyecto.ort.edu.uy.manager.AreaDeTrabajoManagerLocal;
import proyecto.ort.edu.uy.manager.TareaManagerLocal;
import proyecto.ort.edu.uy.web.utilidades.EnumParametros;

@SessionScoped
@ManagedBean(name = "repEmpBean")
public class ReporteEmpresaBean extends AbstractBaseBean {

	/**
	 * 
	 */
	// private Integer tareasCreadas;
	private static final long serialVersionUID = 4113971778811744219L;
	private boolean listarReporte = false;
	private Date fechaIni = new Date();
	private Date fechaFin = new Date();
	private List<Tarea> tareasporEmpresa = new ArrayList<Tarea>();
	private List<AreaDeTrabajo> areasDeLaEmpresa = new ArrayList<AreaDeTrabajo>();
	private List<SoporteReporte> lstSoporte;

	public List<AreaDeTrabajo> getAreasDeLaEmpresa() {
		return areasDeLaEmpresa;
	}

	public void setAreasDeLaEmpresa(List<AreaDeTrabajo> areasDeLaEmpresa) {
		this.areasDeLaEmpresa = areasDeLaEmpresa;
	}

	private Tarea tareaSelected;

	// private TareaDataModel listadoTareas;

	public List<SoporteReporte> tareasDelArea() {
		lstSoporte = new ArrayList<SoporteReporte>();
		if (!areasDeLaEmpresa.isEmpty()) {
			if (fechaIni != null && fechaFin != null) {
				if (fechaIni.after(fechaFin)) {
					mostrarMensaje(FacesMessage.SEVERITY_ERROR, "Error", "La fecha de Inicio no puede superar la fecha de Fin.");
				} else {
					for (AreaDeTrabajo adt : areasDeLaEmpresa) {
						SoporteReporte sr = new SoporteReporte(adt, fechaIni, fechaFin);
						lstSoporte.add(sr);
					}
				}
			} else {
				mostrarMensaje(FacesMessage.SEVERITY_ERROR, "Error", "Es necesario que ingrese una Fecha de inicio y una fecha de Fin");
			}
		}
		return lstSoporte;
	}

	@EJB
	private TareaManagerLocal tareaBean;

	@EJB
	private AreaDeTrabajoManagerLocal areaBean;

	public Date getFechaIni() {
		return fechaIni;
	}

	public void setFechaIni(Date fechaIni) {
		this.fechaIni = fechaIni;
	}

	public Date getFechaFin() {
		return fechaFin;
	}

	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}

	public List<Tarea> getTareasporEmpresa() {
		return tareasporEmpresa;
	}

	public void setTareasporEmpresa(List<Tarea> tareasporEmpresa) {
		this.tareasporEmpresa = tareasporEmpresa;
	}

	public TareaManagerLocal getTareaBean() {
		return tareaBean;
	}

	public void setTareaBean(TareaManagerLocal tareaBean) {
		this.tareaBean = tareaBean;
	}

	public Tarea getTareaSelected() {
		return tareaSelected;
	}

	public void setTareaSelected(Tarea tareaSelected) {
		this.tareaSelected = tareaSelected;
	}

	public ReporteEmpresaBean() {
	}

	public String cargarReportesEmpresa() {
		String outcome = "/paginas/reporteEmpresa";
		return outcome;
	}

	public String home() {
		String outcome = "/paginas/prueba";
		return outcome;
	}

	@PostConstruct
	public void crearReporte() {
		Usuario usu = super.userLogin();
		if (usu.getIdUsuario() != null) {
			if (areasDeLaEmpresa.isEmpty()) {
				areasDeLaEmpresa = areaBean.obtenerAreasDeTrabajoEmpresa(usu);
			}
		}

	}

	public boolean getListarReporte() {
		return listarReporte;
	}

	public void setListarReporte(boolean listarReporte) {
		this.listarReporte = listarReporte;
	}

	public Integer tareasCreadas(AreaDeTrabajo adt) {
		return 0;
	}

	public String fechaInicioTS() {
		String retorno = "";
		if (fechaIni != null) {
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			retorno = sdf.format(this.fechaIni);
		}
		return retorno;
	}

	public String fechaFinTS() {
		String retorno = "";
		if (fechaFin != null) {
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			retorno = sdf.format(this.fechaFin);
		}
		return retorno;
	}

}
